
// 三行必须的代码，启动服务
const express = require('express');
const app = express();
app.listen(3006, () => console.log('启动了'));

// 使用第三方模块解决跨域
const cors = require('cors');
app.use(cors());
// 通过设置响应头，来解决跨域问题
// app.use((req, res, next) => {
//   // 设置一个响应头
//   // res.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:5500');
//   res.setHeader('Access-Control-Allow-Origin', '*');
//   res.setHeader('Access-Control-Allow-Headers', '*');
//   next();
// });

// 使用express-jwt 进行身份认证
const jwt = require('express-jwt');
// jwt() 用于解析token，并将 token 中保存的数据 赋值给 req.user
// unless() 完成身份认证
app.use(jwt({
  secret: 'sfsws23s', // 登录接口中，生成token时使用的 secret
  algorithms: ['HS256'] // 加密算法，了解
}).unless({
  // path: [/^\/api/,  /^\/abc/]
  path: ['/api/login', '/api/reguser'] // 除 /api/login 、/api/reguser 以外，其他接口都需要认证
}));

// 下面一行的配置的意思，接收客户端提交的请求体；并且赋值给 req.body （req.body = { 客户端提交的数据 }）
// 下面的代码只能处理 Content-Type: application/x-www-form-urlencoded 类型的请求体
app.use(express.urlencoded({ extended: true }));

// 加载自定义的路由模块，注册中间件
let loginRouter = require('./routers/login');
app.use('/api', loginRouter);

// let userRouter = require('./routers/user');
// app.use('/my/user', userRouter);
app.use('/my/user', require('./routers/user'));

app.use('/my/category', require('./routers/category'));

app.use('/my/article', require('./routers/article'));


// 错误处理中间件
app.use((err, req, res, next) => {
  // 如果解析token出了问题，则进入下面的判断
  if (err.name === 'UnauthorizedError') {
    res.status(401).send({ status: 1, message: '身份认证失败！' });
  }
});